const _ = require("lodash");
const fs = require("fs");
const path = require("path");

/**
 * 映射 d 文件夹下的文件为模块
 */
const mapDir = d => {
  const tree = {};

  // 获得当前文件夹下的所有的文件夹和文件
  const [dirs, files] = _(fs.readdirSync(d)).partition(p =>
    fs.statSync(path.join(d, p)).isDirectory()
  );

  // 映射文件夹
  dirs.forEach(dir => {
    tree[dir] = mapDir(path.join(d, dir));
  });

  // 映射文件
  files.forEach(file => {
    if (path.extname(file) === ".js") {
      tree[path.basename(file, ".js")] = require(path.join(d, file));
    }
  });

  return tree;
};

// 默认导出当前文件夹下的映射
module.exports = mapDir(path.join(__dirname));
